ThinkPHP5.1+Swoole4.2.8+Websocket 长连接 - 开发文档

1、渠道商管理

通过/admin.php进入后台,账号密码admin
渠道管理模块中设置,密钥功能暂未使用,只针对appid做了鉴权限制。

2、客户端websocket打开方式

本DEMO暂不支持WSS的连接方式

打开websocket时,需要带上appid参数,进行鉴权,格式为:ws://IP:端口?appid=APPID

3、客户端websocket请求格式

客户端websocket发包,数据使用json格式,其中有几个必填参数为:

{
    'appid':APPID,
    'user_id':用户身份凭证,每个用户是固定的,例如为用户ID,手机号,编号都可以,
    'code':请求状态码,其中有几个状态码是系统固定的,其余未占用的可以自行定义
}    

4、客户端websocket已被使用的状态码

code : 1 上线
code : 2 心跳重连
code : 3 下线
code : 4 消息广播
code : 5 强制下线
code : 6 心跳检测

注意:当收到code = 2时,客户端无需进行任何操作。

注意:当收到code = 6时,客户端需要向server发送一个code = 2的空请求,进行心跳检测。

1、启动方式

使用方法:
①:CD进您的/swoole/目录
②:如果您是调试阶段,可以直接php server.php,激活程序,这样的话在运行过程中出错,能在cmd界面查看报错内容
③:如果您是部署阶段,可以使用nohup server.php >>/dev/null 2>&1 &命令,后台守护进程运行。

1、发包方式

直接使用http的方式,对格式为:http://IP:端口?appid=APPID的地址发起请求,请求类型为POST

2、请求格式

原理很简单,就是在client端通过curl的方式模拟websocket客户端向server端发送数据包,所以其数据格式与websocket客户端发包格式一致。

其主要参数由以下几个组成:

{
    'appid':APPID,
    'user_id':用户身份凭证,每个用户是固定的,例如为用户ID,手机号,编号都可以(如果是群发,这块填null), 
    'code':请求状态码,其中有几个状态码是系统固定的,其余未占用的可以自行定义
    'limit': 当code为8时必填,为拉取在线用户记录数,
    'page': 当code为8时必填,为拉取在线用户当前页数,
}    

3、client端已被使用的状态码

该系统状态码与websocket系统占用状态码是共用的,只是分开说明比较好理解。

code : 7 查询渠道信息
code : 8 查询渠道下的用户列表

4、返回数据格式

{
    code:状态码
    msg:说明
    data:返回数据
}

5、返回的状态码

code : 500 错误
code : 200 成功

SDK与DEMO下载

WebSocket客户端:/swoole/demo/index.php,启动server.php后直接访问即可,是个简单的聊天室demo
Server端:/swoole/server.php,按文档启用方式
Client端:/swoole/client-sdk/go.php,打开文件阅读代码

注解

A.有的人可能会疑惑,你这个是面向聊天室类的WebSocket,那要怎么改成客户端只面向Client通信,不需要群广播消息呢?
其实很简单,我们只需要修改下/swoole/server.php中的消息接收模块(onMessage事件)就行,熟悉swoole的朋友改起来很简单。

B.有的人又很疑惑了,我看你的websocket端的请求数据格式只有3个字段,那如果我想自定义多几个字段,例如contentuser_name之类的可不可以呢?
其实是可以的,那3个字段只是系统的固定字段,如果你需要添加其他的字段则直接添加即可,系统会完整的推送广播出去。